/*
 * L'application ZenContact en Grails a été écrite par Nicolas Martignole,
 * elle est mise à disposition selon les termes de la licence
 *
 * Creative Commons Paternité-Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique 2.0 France.
 * 
 * Basé(e) sur une oeuvre http://www.touilleur-express.fr/2009/12/20/grails-lapplication-zencontact-de-zenika/
 *
 * Les autorisations au-delà du champ de cette licence peuvent être obtenues à http://touilleur-express.fr/.
 * Voir http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
 *
 * Copyright(c) Nicolas Martignole 2010.
 *
 */
import org.letouilleur.demo.Contact
import javax.servlet.ServletContext
import com.excilys.blog.zencontact.User
import com.excilys.blog.zencontact.Role
import com.excilys.blog.zencontact.RequestMap

/**
 * Script de demarrage
 */
class BootStrap {

  def init = {ServletContext ctx ->

    environments {
      production {
        createSecurity()
        ctx.setAttribute("env", "prod")
      }
      development {
        createSecurity()
        createTestEntries()
        ctx.setAttribute("env", "dev")
      }
    }


  }

  def destroy = {
  }
  
  void createSecurity() {
      def roleUser = new Role(authority: 'ROLE_USER', description: 'Utilisateur')
      roleUser.save()
      
      def roleContact = new Role(authority: 'ROLE_CONTACT', description: 'Accès aux contacts')
      roleContact.save()

      def user1 = new User(username: 'piwai', passwd:'NOT_USED', userRealName: 'Pierre-Yves Ricau',
            enabled: true, email: 'ano@nymous.com')
      user1.addToAuthorities(roleUser)
      user1.addToAuthorities(roleContact)
      user1.save()
      
      def user2 = new User(username: 'pyricau', passwd:'NOT_USED', userRealName: 'Pierre-Yves Ricau',
            enabled: true, email: 'ano@nymous.com')
            
      user2.addToAuthorities(roleUser)
      user2.save()

      new RequestMap(url: '/contact/**', configAttribute: 'ROLE_CONTACT').save()
  
  }

  // Cette methode est appele uniquement en mode developpement afin de creer des Contacts

  void createTestEntries() {
    def nm = new Contact(prenom: "Nicolas", nom: "Martignole", dateNaissance: new Date() - 120, email: "nicolas@test.fr")
    nm.save()

    def c = new Contact(prenom: "Paul", nom: "Gontran", dateNaissance: new Date() - 1, email: "paul@toto.fr")
    c.save()
    if (c.hasErrors())
      println c.errors


    new Contact(prenom: "Georges", nom: "Lucas", dateNaissance: new Date() - 1, email: "lucas@star.fr").save(failOnError: true)
    new Contact(prenom: "Gregory", nom: "Madisson", dateNaissance: new Date() - 3, email: "mads@son.com").save()
    new Contact(prenom: "Jonathan", nom: "Lalou", dateNaissance: new Date() - 2, email: "john@lecowboy.fr").save()
    new Contact(prenom: "Katherine", nom: "Grah", dateNaissance: new Date() - 3, email: "kat@noop.fr").save()
    new Contact(prenom: "Amelie", nom: "Blou", dateNaissance: new Date() - 56, email: "amelie@noop.fr").save()
    new Contact(prenom: "Anatole", nom: "Ducib", dateNaissance: new Date() - 23, email: "am@noop.fr").save()
    new Contact(prenom: "François", nom: "ProdMan", dateNaissance: new Date() - 4, email: "kim@noop.fr").save()
    new Contact(prenom: "David", nom: "CeChau", dateNaissance: new Date() - 91, email: "david@noop.fr").save()
    new Contact(prenom: "Mélanie", nom: "Hénéstique", dateNaissance: new Date() - 3, email: "pierre@noop.fr").save()

    // Pour que ce contact soit sauvegarde il faut que la class Contact
    // rende l'attribut dateNaissance optionel.
    // Editez Contact.groovy et verifiez que la contrainte nullable:true sur
    // l'attribut dateNaissance est specifiee de cette façon
    //  dateNaissance(nullable:true)
    new Contact(prenom: "Andre", nom: "Magphone", email: "ant@noop.fr").save()

    // Ca, c'est les contacts rigolos ajoutés pour YMCA
   new Contact(prenom: "Agathe", nom: "Zepoweur", telephone: "06 01 01 01 01", adresse: "Vasagatan 9, 17267 Sundbyberg, Sweden", email: "pyricau@excilys.com").save()
   new Contact(prenom: "François", nom: "Pignon", telephone: "06 02 02 02 02", adresse: "57 rue de Varenne 75007 Paris", email: "francois@pignon.fr").save()
   new Contact(prenom: "Gérard", nom: "Manvussa", telephone: "06 03 03 03 03", adresse: "27, Rue Duguay Trouin, 76000 Rouen, France", email: "gerard@manvussa.fr").save()
   new Contact(prenom: "Hubert", nom: "Bonisseur de la Bath", telephone: "06 04 04 04 04", adresse: "5, rue de la Sourdiere, 75001 Paris", email: "incognito@oss117.fr").save()
   new Contact(prenom: "Odile", nom: "Deray", telephone: "06 05 05 05 05", adresse: "27 Rue Louis Perrissol 06400 Cannes, France", email: "lacite@delapeur.fr").save()
   new Contact(prenom: "Olivier", nom: "Louarne", telephone: "06 06 06 06 06", adresse: "10 bis rue de Fontenay 92340 Bourg La Reine, France", email: "ebi@ebusinessinformation.fr").save()
   new Contact(prenom: "Salah", nom: "Kis", telephone: "06 07 07 07 07", adresse: "Société des Caves, 12250 Roquefort-sur-Soulzon, France", email: "aubonlait@debrebis.fr").save()
        
       

  }
} 
